关键词和代码块的TSQL替换

发布于 2024-12-06 11:15:43 字数 408 浏览 1 评论 0原文

我有 TSQL 块,我想为其创建宏,然后在我的 SQL 文件中重用。我希望这只是“编译”时的事情。

例如:

?set? COMMON = "Field1 int, Field2 char(1),";
?set? MAKEONE = "create table";

MAKEONE XXX (
    COMMON
    Field3 int
);

请不要问我为什么要...:)

...它是针对 SQL Server 的。

好的,那么 SQL 的条件执行呢:

?set? ISYES = true;

?if? ISYES 
create table AAA (...)
?else?
create table BBB (...)

I have blocks of TSQL that I want to create a MACRO for and then reuse in my SQL file. I want this to be a 'compile' time thing only.

Eg:

?set? COMMON = "Field1 int, Field2 char(1),";
?set? MAKEONE = "create table";

MAKEONE XXX (
    COMMON
    Field3 int
);

Please dont ask why I would want to ... :)

... it is for SQL Server.

Ok, what about conditional execution of SQL:

?set? ISYES = true;

?if? ISYES 
create table AAA (...)
?else?
create table BBB (...)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

妖妓 2024-12-13 11:15:43

您所要求的内容在 SQL 术语中没有什么意义

根据您的示例:

  1. A CREATE TABLE 正是:CREATE TABLE。为什么要宏呢?您不会替换“CREATE PROCEDURE”。

  2. 拥有“公共”字段将表明设计不佳

您还必须考虑:

  • 约束、键和索引
  • 使用动态 SQL 的权限
  • 开发“框架”的成本执行 SQL 已经执行
  • 的对象权限

操作 现在,您要解决的业务问题是什么?
而不是询问您选择的解决方案...

编辑:问题更新为我在上面输入的内容:

IF (a condition)
   EXEC ('CREATE TABLE ...')
ELSE IF (a condition)
   EXEC ('CREATE TABLE ...')
...

请注意,SQL 中的大部分 DDL 必须位于其自己的批处理中或批处理中的第一个语句中。因此再次使用动态SQL

What you are asking makes little sense in SQL terms

Based on your examples:

  1. A CREATE TABLE is exactly that: a CREATE TABLE. Why Macro it? You aren't going to substitute "CREATE PROCEDURE".

  2. Having "common" fields would indicate poor design

You also have to consider:

  • constraints, keys and indexes
  • permissions of using dynamic SQL
  • the cost of developing a "framework" to do what SQL already does
  • permissions of your objects

Now, what is the business problem you are trying to solve?
Instead of asking about your chosen solution...

Edit: question updated as I typed above:

IF (a condition)
   EXEC ('CREATE TABLE ...')
ELSE IF (a condition)
   EXEC ('CREATE TABLE ...')
...

Note that much of DDL in SQL must be in it's own batch or the first statement in a batch. Hence use of dynamic SQL again

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文