相关疑难解决方法(0)

如何在T-SQL中使用变量作为数据库名称?

我在我的脚本中的几个地方使用数据库名称,我希望能够快速更改它,所以我正在寻找这样的东西:

DECLARE @DBNAME VARCHAR(50)
SET @DBNAME = 'TEST'

CREATE DATABASE @DBNAME
GO
ALTER DATABASE @DBNAME SET COMPATIBILITY_LEVEL = 90
GO
ALTER DATABASE @DBNAME SET RECOVERY SIMPLE 
GO
Run Code Online (Sandbox Code Playgroud)

但它不起作用.那么编写这段代码的正确方法是什么?

sql-server

121
推荐指数
4
解决办法
19万
查看次数

表名作为PostgreSQL函数参数

我想在Postgres函数中传递一个表名作为参数.我试过这段代码:

CREATE OR REPLACE FUNCTION some_f(param character varying) RETURNS integer 
AS $$
    BEGIN
    IF EXISTS (select * from quote_ident($1) where quote_ident($1).id=1) THEN
     return 1;
    END IF;
    return 0;
    END;
$$ LANGUAGE plpgsql;

select some_f('table_name');
Run Code Online (Sandbox Code Playgroud)

我得到了这个:

ERROR:  syntax error at or near "."
LINE 4: ...elect * from quote_ident($1) where quote_ident($1).id=1)...
                                                             ^

********** Error **********

ERROR: syntax error at or near "."
Run Code Online (Sandbox Code Playgroud)

以下是更改为此时出现的错误select * from quote_ident($1) tab where tab.id=1:

ERROR:  column tab.id does not exist
LINE 1: ...T EXISTS …
Run Code Online (Sandbox Code Playgroud)

postgresql function dynamic-sql plpgsql identifier

69
推荐指数
4
解决办法
7万
查看次数

如何从SQL Server中的另一个数据库中选择表的数据?

假设,我有一个testdb测试服务器中命名的数据库.此外,我在prod服务器中有一个名为proddb的数据库.

现在我想从proddb数据库中选择testdb数据库表的数据.

我怎么能这样做SQL Server

另外,我可以用做数据库链接预言.但是如何在SQL Server中做到这一点?

sql database sql-server linked-server

46
推荐指数
5
解决办法
30万
查看次数

如何使用SqlCommand创建带参数化数据库名称的DATABASE?

简而言之.我有两个简单的助手:

    private SqlCommand CreateCommand(string text)
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = connection;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = text;
        return cmd;
    }

    void SetParameter(SqlCommand cmd, string p, string dbName)
    {
        cmd.Parameters.Add(p, SqlDbType.NVarChar);
        cmd.Parameters[p].Value = dbName;
    }
Run Code Online (Sandbox Code Playgroud)

这执行OK:

var cmd = CreateCommand("CREATE DATABASE Demo "+
            @"ON (FILENAME = N'c:\demo_data.mdf') "+ 
            @"LOG ON (FILENAME = N'c:\demo_data.mdf.LDF') "+
            "FOR ATTACH " +
            "GO");
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

但这不是:

string dataBaseAttachText = "CREATE DATABASE @dbname " +
                              "ON (FILENAME = @filename) " +
                              "LOG ON (FILENAME …
Run Code Online (Sandbox Code Playgroud)

c# sql-server ado.net

16
推荐指数
4
解决办法
1万
查看次数

使用动态Sql创建视图

我正在尝试创建一个动态数据库创建脚本.

有很多步骤,我们经常创建这个数据库,所以脚本看起来像这样.

 DECLARE @databaseName nvarchar(100) = 'DatabaseName'
 EXEC('/*A lot of database creation code built off of @databaseName*/')
Run Code Online (Sandbox Code Playgroud)

除了我们在此数据库中创建的一个视图外,这一切都很好.

我理解的问题源于SQL中关于EXEC命令的三个规则

  1. 使用环境只对EXEC的生命有效
  2. 'CREATE VIEW'必须是查询批处理中的第一个语句
  3. GO实际上不是SQL命令,因此在动态sql中不允许这样做
  4. 在CREATE VIEW上,您只能指定为Schema.

所以这里有三件我尝试过但没有成功的事情.

--Result: Error message, "'CREATE VIEW' must be the first statement in a query batch"
EXEC 
('
    USE [' + @databaseName + ']
    CREATE VIEW
')
Run Code Online (Sandbox Code Playgroud)

有什么建议?我认为这应该是一个常见的用例,但谷歌无法帮助我.

t-sql sql-server dynamic-sql

9
推荐指数
1
解决办法
2万
查看次数

在 SQL Server 中通过 SQL 将数据库名称分配给变量

我想将数据库名称分配给声明的变量,这就是我已经尝试过的方式:

DECLARE @DBname VARCHAR(100)

SET @DBname = 'PatientTurningSystem'

SELECT TABLE_NAME, TABLE_TYPE
FROM @DBname.INFORMATION_SCHEMA.TABLES
Run Code Online (Sandbox Code Playgroud)


但我收到以下错误:

消息 102,级别 15,状态 1,过程 SP_TableDeatails,第 8 行
'.' 附近的语法不正确

sql-server sql-server-2014

6
推荐指数
1
解决办法
1万
查看次数

如何在 SQL Server 中将数据库名称作为参数传递

USE master
GO

DECLARE @DbName nvarchar(MAX)
SET @DbName = N'DataBase'

ALTER DATABASE @DbName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE

ALTER DATABASE @DbName SET OFFLINE WITH NO_WAIT
GO

ALTER DATABASE @DbName SET ONLINE
GO

ALTER DATABASE @DbName
SET MULTI_USER
GO
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 EXEC,但它有点难看......

sql sql-server dml

3
推荐指数
1
解决办法
5120
查看次数